package com.sushi.utils;

import java.io.File;
import java.text.ParseException;

import com.sushi.repository.entity.*;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;

/**
 * 主控台
 * @author Administrator
 */
@Slf4j
public class MainConsole {



//------          时间工具       --------------------
    /**
     * 时间转换器
     */
    @Test
    public void exchangeTime() throws ParseException {
        String markContent = "提示文案";
        // TODO 时间值为必填项，可以long值，也可 年-月-日 时:分:秒
        String time = "2023-05-02 14:41:13";
        // TODO 类型选择：1-转 可视化时间  2-转 long值
        int type = 2;

        switch (type) {
            case 1:
                System.out.println(markContent.concat("：") + TimeUtil.getFormatTime(Long.parseLong(time)));
                break;
            case 2:
                System.out.println(markContent.concat("：") + TimeUtil.getLongTime(time));
                break;
            default:
                System.out.println("请选择类型！！");
                break;
        }

    }


//------          文件工具       --------------------
    /**
     * 文件下载
     */
    @Test
    public void downLoadFile() {
        // TODO 填写文件 url、保存地址、保存后的文件命名、文件类型
        String fileUrl = "https://b2b-2-test-public.oss-cn-hangzhou.aliyuncs.com/1679377914128.pdf"; // 必填
        String localDir = "D:/Temp/";
        String localFileName = "newFile";
        String localFileType = "pdf";
        // TODO 类型选择：1-默认下载  2-自定义保存路径  3-自定义文件名  4-自定义文件名、文件类型
        int type = 2;
        //----------------------------------------------------------
        File file = new File("");
        switch (type) {
            case 1:
                /*    默认下载    */
                file = FileUtil.downloadFile(fileUrl);
                break;
            case 2:
                /*    自定义保存路径下载    */
                file = FileUtil.downloadFile(fileUrl, localDir);
                break;
            case 3:
                /*    不定类型的定名称下载    */
                file = FileUtil.downloadFile(fileUrl, localDir, localFileName);
                break;
            case 4:
                /*    定义文件名、定义文件类型下载    */
                file = FileUtil.downloadFile(fileUrl, localDir, localFileName, localFileType);
                break;
            default:
                break;
        }
        System.out.println("保存后文件路径为：\n" + file.getAbsolutePath());
    }



//------          xx工具       --------------------



//------          预写工具       --------------------
    /**
     * 写入一个定义名的所有层内容
     */
    @Test
    public void writeAllCode() {
        // TODO 请分别输入：包名，定义类名，定义类注释
        final String packageName = "com.sushi";
        final String className = "Black";
        final String comment = "黑名单";
        //---------------------------------------------
        CodeUtil.setAll(packageName, className, comment);
    }

    /**
     * 写入一个定义名的自定义层内容
     */
    @Test
    public void writeSomeCode() {
        // TODO 请分别输入：包名，定义类名，定义类注释
        final String packageName = "com.sushi";
        final String className = "TagRelation";
        final String comment = "标签关系";
        //---------------------------------------------
        // TODO 请选择需要写入的层级，不需要的请注释掉
//        CodeUtil.setAll(packageName, className, comment);

//        CodeUtil.setEntity(packageName, className, comment);  // 建表实体类
//        CodeUtil.setMapper(packageName, className, comment);  // 数据库映射类
        CodeUtil.setService(packageName, className, comment);  // 服务规范接口
        CodeUtil.setServiceImpl(packageName, className, comment);  // 服务实现类
//        CodeUtil.setController(packageName, className, comment);  // 控制层
        CodeUtil.setRequest(packageName, className, comment);  // 请求参数类
        CodeUtil.setResponse(packageName, className, comment);  // 返回参数类
        CodeUtil.setPageRequest(packageName, className, comment);  // 请求参数类

    }

    /**
     * 规范实体类写法
     */
    @Test
    public void changeCode() {
        // TODO 输入需要规范的部分代码，示例：`private String id;`
        final String source = "    private String id;\n" +
                "\n" +
                "    private String blackId;";
        //-------------------------------------------------
        System.out.println("规范结果如下：\n" + CodeUtil.normalizeEntityFiled(source));
    }


//------          生成建表sql           --------------------

    /**
     * 生成一个初版建表Sql，细节需要手动修改，如备注和主键
     */
    @Test
    public void getCreateTableSql() {
        // TODO 把类对象赋值到如下：
        Class<?> targetClass = BlackEntity.class;
        //------------------------------------------------
        System.out.println(CodeUtil.getTableSql(targetClass, "gpc"));
    }


//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    @Test
    public void test() {
        Class<BlackEntity> entityClass = BlackEntity.class;

        System.out.println(CodeUtil.getAddModel(entityClass));
        System.out.println("==============================");
        System.out.println(CodeUtil.getRemoveModel(entityClass));
        System.out.println("==============================");
        System.out.println(CodeUtil.getUpdateModel(entityClass));
        System.out.println("==============================");
        System.out.println(CodeUtil.getQueryModel(entityClass));
        System.out.println("==============================");
        System.out.println(CodeUtil.getDetailModel(entityClass));

    }

}
